package ntd.util.frame.storage.factory;

import cn.hutool.core.util.ObjectUtil;
import ntd.util.config.common.exception.ComException;
import ntd.util.config.common.enums.EnumPlatformType;
import ntd.util.frame.storage.NtdStorage;
import ntd.util.frame.storage.bo.StorageConfig;
import ntd.util.frame.storage.impl.NtdStorageAliyun;
import ntd.util.frame.storage.impl.NtdStorageMinio;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

public class FactoryStorage {

    private static Map<EnumPlatformType, Function<StorageConfig, NtdStorage>> ntdHandleMap = new HashMap<>();

    static {
        ntdHandleMap.put(EnumPlatformType.MINIO, NtdStorageMinio::new);
        ntdHandleMap.put(EnumPlatformType.ALIYUN, NtdStorageAliyun::new);
    }

    public static NtdStorage generatorStorage(EnumPlatformType enumPlatformType, StorageConfig storageConfig) {
        Function<StorageConfig, NtdStorage> storageFunction = ntdHandleMap.get(enumPlatformType);
        if (ObjectUtil.isNull(storageFunction)) {
            throw new ComException("该文件上传方式未接入！");
        }
        return storageFunction.apply(storageConfig);
    }
}
